package nyist.media.service;

import nyist.media.bean.auth.MenuAuthListBean;
import nyist.media.bean.auth.MenuOptionBean;
import nyist.media.bean.auth.MenuTreeBean;
import nyist.media.entity.admin.MenuAuth;
import nyist.media.exception.BusinessException;
import nyist.media.page.AppPage;
import nyist.media.utils.Filter;
import nyist.media.utils.Order;
import org.springframework.data.domain.PageRequest;

import java.util.List;

/**
 * @author dcf
 */
public interface MenuAuthService extends BaseService<MenuAuth, Long> {

    /**
     * 分页查询菜单权限信息
     *
     * @param parentId 父类ID
     * @param pageable 分页对象
     * @return 权限列表
     */
    AppPage<MenuAuthListBean> findPage(Long parentId, PageRequest pageable);

    /**
     * 查询权限菜单详情
     *
     * @param id 菜单权限ID
     * @return 权限对象信息
     */
    MenuAuthListBean getInfo(Long id);

    /**
     * 更新菜单权限
     *
     * @param param 更新的字段信息
     * @throws BusinessException 更新失败
     */
    void update(MenuAuthListBean param) throws BusinessException;

    /**
     * 添加菜单权限信息
     *
     * @param param 添加的权限信息字段
     * @throws BusinessException 保存失败，抛出自定义异常
     */
    void save(MenuAuthListBean param) throws BusinessException;

    /**
     * 删除权限信息
     *
     * @param id 待删除权限ID
     * @throws BusinessException 自定义异常
     */
    void delete(Long id) throws BusinessException;

    /**
     * 查询权限下拉菜单
     *
     * @return 带渲染数据
     */
    List<MenuOptionBean> findOptions();

    /**
     * 查询权限树
     *
     * @return 权限树结果
     */
    List<MenuTreeBean> findRoot();

    /**
     * 查询菜单列表
     *
     * @return 菜单列表信息
     */
    List<MenuTreeBean> menuList();

    /**
     * 切换菜单权限信息
     * @param id 菜单权限ID
     * @return 菜单权限对象
     */
    MenuAuth switchStatus(Long id);

    /**
     * 切换首页展示
     * @param id 权限ID
     * @return 菜单权限对象
     */
    MenuAuth show(Long id);
}
